public class MethodValidationPostProcessor extends ProxyConfig implements BeanPostProcessor, BeanClassLoaderAware, Ordered, InitializingBean
BeanPostProcessor
implementation that delegates to a
JSR-303 provider for performing method-level validation on annotated methods.
Applicable methods have JSR-303 constraint annotations on their parameters and/or on their return value (in the latter case specified at the method level, typically as inline annotation), e.g.:
public @NotNull Object myValidMethod(@NotNull String arg1, @Max(10) int arg2)
Target classes with such annotated methods need to be annotated with Spring's
Validated
annotation at the type level, for their methods to be searched for
inline constraint annotations. Validation groups can be specified through @Validated
as well. By default, JSR-303 will validate against its default group only.
As of Spring 3.1, this functionality requires Hibernate Validator 4.2 or higher. In Spring 3.1.2, this class will autodetect a Bean Validation 1.1 compliant provider and automatically use the standard method validation support there (once available).
MethodValidationInterceptor
,
org.hibernate.validator.method.MethodValidator
,
Serialized FormModifier and Type | Field and Description |
---|---|
private Advisor |
advisor |
private java.lang.ClassLoader |
beanClassLoader |
private java.lang.Class<? extends java.lang.annotation.Annotation> |
validatedAnnotationType |
private Validator |
validator |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
MethodValidationPostProcessor() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by a BeanFactory after it has set all bean properties supplied
(and satisfied BeanFactoryAware and ApplicationContextAware).
|
int |
getOrder()
Return the order value of this object, with a
higher value meaning greater in terms of sorting.
|
java.lang.Object |
postProcessAfterInitialization(java.lang.Object bean,
java.lang.String beanName)
Apply this BeanPostProcessor to the given new bean instance after any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
java.lang.Object |
postProcessBeforeInitialization(java.lang.Object bean,
java.lang.String beanName)
Apply this BeanPostProcessor to the given new bean instance before any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
void |
setBeanClassLoader(java.lang.ClassLoader classLoader)
Callback that supplies the bean
class loader to
a bean instance. |
void |
setValidatedAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> validatedAnnotationType)
Set the 'validated' annotation type.
|
void |
setValidator(Validator validator)
Set the JSR-303 Validator to delegate to for validating methods.
|
void |
setValidatorFactory(ValidatorFactory validatorFactory)
Set the JSR-303 ValidatorFactory to delegate to for validating methods,
using its default Validator.
|
copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setFrozen, setOpaque, setOptimize, setProxyTargetClass, toString
private java.lang.Class<? extends java.lang.annotation.Annotation> validatedAnnotationType
private Validator validator
private java.lang.ClassLoader beanClassLoader
private Advisor advisor
public void setValidatedAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation> validatedAnnotationType)
Validated
annotation.
This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate that a class is supposed to be validated in the sense of applying method validation.
validatedAnnotationType
- the desired annotation typepublic void setValidator(Validator validator)
Default is the default ValidatorFactory's default Validator.
public void setValidatorFactory(ValidatorFactory validatorFactory)
Default is the default ValidatorFactory's default Validator.
javax.validation.ValidatorFactory#getValidator()
public void setBeanClassLoader(java.lang.ClassLoader classLoader)
BeanClassLoaderAware
class loader
to
a bean instance.
Invoked after the population of normal bean properties but
before an initialization callback such as
InitializingBean's
InitializingBean.afterPropertiesSet()
method or a custom init-method.
setBeanClassLoader
in interface BeanClassLoaderAware
classLoader
- the owning class loader; may be null
in
which case a default ClassLoader
must be used, for example
the ClassLoader
obtained via
ClassUtils.getDefaultClassLoader()
public int getOrder()
Ordered
Normally starting with 0, with Integer.MAX_VALUE
indicating the greatest value. Same order values will result
in arbitrary positions for the affected objects.
Higher values can be interpreted as lower priority. As a consequence, the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values).
public void afterPropertiesSet()
InitializingBean
This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.
afterPropertiesSet
in interface InitializingBean
public java.lang.Object postProcessBeforeInitialization(java.lang.Object bean, java.lang.String beanName) throws BeansException
BeanPostProcessor
afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.postProcessBeforeInitialization
in interface BeanPostProcessor
bean
- the new bean instancebeanName
- the name of the beannull
, no subsequent BeanPostProcessors will be invokedBeansException
- in case of errorsInitializingBean.afterPropertiesSet()
public java.lang.Object postProcessAfterInitialization(java.lang.Object bean, java.lang.String beanName) throws BeansException
BeanPostProcessor
afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.
In case of a FactoryBean, this callback will be invoked for both the FactoryBean
instance and the objects created by the FactoryBean (as of Spring 2.0). The
post-processor can decide whether to apply to either the FactoryBean or created
objects or both through corresponding bean instanceof FactoryBean
checks.
This callback will also be invoked after a short-circuiting triggered by a
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
method,
in contrast to all other BeanPostProcessor callbacks.
postProcessAfterInitialization
in interface BeanPostProcessor
bean
- the new bean instancebeanName
- the name of the beannull
, no subsequent BeanPostProcessors will be invokedBeansException
- in case of errorsInitializingBean.afterPropertiesSet()
,
FactoryBean